R语言读书笔记以及为什么发读书笔记
昨天发布了生信人必备书单,大家的反响比较热烈,褒贬不一!
其实吧,就像我自己评价的那样:
我再次强调一下,我会的所有知识,我都看过5本以上的书,甚至把一本书看五遍,这个我觉得没有任何难道,任何事情想学会学好,本来需要付出的。
比如看看我以前的笔记:
了解我的粉丝都应该是知道我很懒的,因为我最开始学的perl语言,perl语言创造者提出了程序员的三大美德,其中之一就是懒惰。
所以这个图书笔记我就原样拷贝了,大家将就着看吧,反正如果你真想学到东西,还是得买本书仔细阅读的。
因为这个读书笔记发布的时候,我还没有转为markdown写作,所以排版奇丑无比,还望见谅。
假如你接受了我的建议,把一本书看五遍,同一个领域的书籍至少看5本,那么希望你也记录一下读书笔记与我分享,欢迎来信交流,我的邮箱是 jmzeng1314@163.com
或者你把我的这个笔记重新编辑为markdown格式,也能发邮件给我获得认识我的资格哈!
下面是正文
R与ASReml-R统计分析教程(林元震)中国林业出版社
1-3章简单介绍了R的基本语法,然后第4章着重讲了各种统计方法,第5章讲R的绘图,最后一章讲ASReml-R这个包
语法重点:
1,install.packages(),library(),help(),example(),demo(),length(),attribute(),class(),mode(),dim(),names(),str(),head(),
tail()
2,rep,seq,paste,array,matrix,data.frame,list,c(),factor(),
3,缺失值处理(na.omit,na.rm=T),类型转换(as.numeric(),as.character(),as.factor(),as.logical())
其中as.numeric(),as.character()非常有用,在画图的时候经常需要加上,因为数据在处理的过程中经常被搞错成了字符串格式,而as.logical()可以进行分类,只有0,NA,NAN,NULL是FALSE
4,排序,合并,分割成子集,数据整合重构(reshape2和plyr包)
可以先了解一些R语言自带的数据包(见附录1),然后试用一下aggregate函数,数据汇总,根据右边的因子来把左边的数据进行分割并处理一个函数
5,控制语句,自编函数
统计分析
一、summary(), library(pastecs);options(digits=2);stat.desc(), library(psych);describe()
二、方差分析(analysis of variance,ANOVA)用来检验分组是否有显著差异
1,单因素+重复,数据框,df=data.frame(yield,treat)
fit=aov(yield~treat,data=df)
可以用summary来查看这次分析结果summary(fit)
用TukeyHSD(fit)进行多重比较,或者duncan.test(fit,”treat”,alpha=0.05)
2,双因素无重复,数据框,df=data.frame(yield,treat1,treat2)
fit=aov(yield~treat1+treat2,data=df)
这时候做多重比较就比较复杂了,library(agricolae)
Duncan.test(fit,”treat1”,alpha=0.5)
Duncan.test(fit,”treat2”,alpha=0.5)
3,双因素+重复,数据库首先要进行处理,把treat1和treat2合并成group来区分重复
Df$group=sapply(df,function(x) paste(df$treat1,df$treat2,sep=””))
然后fit=aov(yield~treat1+treat2+group,data=df)
4,多元方差与此类似,不停的增加因子来区分变量及group
三、随机分组的检验
1,完全随机实验,等同于方差分析的单因素+重复(判断不同的处理是否有差异)
2,单因素随机区组实验,等同于方差分析的双因素无重复,其中(区组这个因素是人为控制的差异,不需要检验,主要检验我们的不同的处理是否有差异)
3,双因素随机区组实验,不等同于方差分析的双因素+重复,但是与之类似,其中重复这个变量与之前的group变量有点区别,这里是我们的区组,而不是treat1和treat2的简单组合,所以我们需要分析treat1和treat2处理间的差异,但同时不需要考虑区组的差异
fit=aov(yield~treat1*treat2+block,data=df),如果treat1有2个水平,treat2有3个水平,那么之前的group应该是6个,但是我们的block是区组的个数,还是3个,数据是18个。
4,三因素随机区组实验
看下面的例子
本地图片,请重新上传
其中npk数据框里面有着N,P,K三个因素,每个因素都有两个水平,共8个group组合,分成了6个区组block,即为6个重复。但是每个group组合并没有包括所有的8个水平组合,只有4个而已,所以数据量也只有4个。这就是方差分析与随机区组分析最大的区别所在。
本地图片,请重新上传
四、统计显著性检验(前提是符合各种概率分布模型)
1、t检验
i. 单样本,对一个多数据的向量x,看看是否是服从正态分布
qqnorm(x),qqline(x),正态QQ图,plot(density(x))核密度图 ,shapiro.test(x) 正态性检验,T.test(x,mu=8,alternative=”two.sided”)看看这个数据的均值与8的差异是否显著。
ii. 双样本检验是否显著差异,t.test(a,b)或者t.test(a~b)
2、卡方检验
i. 是否符合一定的比例chisq.test(c(49,51),c(0.5,0.5)),看看扔100次硬币的正反面比例是否正常
ii. 本地图片,请重新上传
iii. P值为0.8415,所以显著的正常
a) 独立性检验
i. 2x2列联表或者2xc列联表独立性检验,主要是为了看某个处理是否改变了原来的标准比例,比如本来正常1:1的扔硬币,扔一百次是49:50的,但是现在换了一个小硬币,再扔一百次,结果是48:52,我们就想看看这个硬币是否改变了比例
本地图片,请重新上传
很明显可以看出比例未发生变化,同理可以扩展到RxC列联表的比例是否变化
五、回归分析
1、简单线性回归,fit=lm(y~x)可以对此回归进行一系列分析,summary(fit),round(fitted(fit),2) 预测值,round(residuals(fit),2)残差值,abline(fit)回归线
2、多项式回归fit=lm(y~x+I(x^2))以此类推
3、多元回归fit=lm(y~x1+x2+x3)以此类推,fit=lm(y~x1+x2+x1: x2)有交互项。
4、回归诊断,对fit对象plot可以输出四幅图par(mfrow=c(2,2)); plot(fit)
第一幅图是残差值与预测值的线性关系图,理论上残差值应该是随机分布在预测值的两端。
第二幅图是Q-Q图,判断残差值在标准正态分布下的概率,理论上应该是45度直线。
第三幅图是位置尺度图,判断同方差性,假设是方差不变,所以图中的点应该随机分布于水平线的两侧。
第四幅图是残差值的杠杆图,用来判断异常点,鉴别高杠杆点,离群点,强影响点,识别异常点。
5、广义线性模型
6、逻辑回归和泊松回归
六、概率分布
a) 分布+概率密度函数d+累计分布函数p+随机抽样r+分布检验ks.test(x,”pnorm”)
b) 正态分布(norm),指数分布(exp),二项分布,泊松分布,卡方分布(chisq),伽马分布(gama),贝塔分布(beta),T分布,F分布,均匀分布(unif),韦伯分布(weibull),一般连续分布,一般离散分布。
c) 很复杂,见附录2
附录I,datasets(R自带数据包)
向量
euro #欧元汇率,长度为11,每个元素都有命名
landmasses #48个陆地的面积,每个都有命名
precip #长度为70的命名向量
rivers #北美141条河流长度
state.abb #美国50个州的双字母缩写
state.area #美国50个州的面积
state.name #美国50个州的全称
因子
state.division #美国50个州的分类,9个类别
state.region #美国50个州的地理分类
矩阵、数组
euro.cross #11种货币的汇率矩阵
freeny.x #每个季度影响收入四个因素的记录
state.x77 #美国50个州的八个指标
USPersonalExpenditure #5个年份在5个消费方向的数据
VADeaths #1940年弗吉尼亚州死亡率(每千人)
volcano #某火山区的地理信息(10米×10米的网格)
WorldPhones #8个区域在7个年份的电话总数
iris3 #3种鸢尾花形态数据
Titanic #泰坦尼克乘员统计
UCBAdmissions #伯克利分校1973年院系、录取和性别的频数
crimtab #3000个男性罪犯左手中指长度和身高关系
HairEyeColor #592人头发颜色、眼睛颜色和性别的频数
occupationalStatus #英国男性父子职业联系
类矩阵
eurodist #欧洲12个城市的距离矩阵,只有下三角部分
Harman23.cor #305个女孩八个形态指标的相关系数矩阵
Harman74.cor #145个儿童24个心理指标的相关系数矩阵
数据框
airquality #纽约1973年5-9月每日空气质量
anscombe #四组x-y数据,虽有相似的统计量,但实际数据差别较大
attenu #多个观测站对加利福尼亚23次地震的观测数据
attitude #30个部门在七个方面的调查结果,调查结果是同一部门35个职员赞成的百分比
beaver1 #一只海狸每10分钟的体温数据,共114条数据
beaver2 #另一只海狸每10分钟的体温数据,共100条数据
BOD #随水质的提高,生化反应对氧的需求(mg/l)随时间(天)的变化
cars #1920年代汽车速度对刹车距离的影响
chickwts #不同饮食种类对小鸡生长速度的影响
esoph #法国的一个食管癌病例对照研究
faithful #一个间歇泉的爆发时间和持续时间
Formaldehyde #两种方法测定甲醛浓度时分光光度计的读数
Freeny #每季度收入和其他四因素的记录
dating from #配对的病例对照数据,用于条件logistic回归
InsectSprays #使用不同杀虫剂时昆虫数目
iris #3种鸢尾花形态数据
LifeCycleSavings #50个国家的存款率
longley #强共线性的宏观经济数据
morley #光速测量试验数据
mtcars #32辆汽车在11个指标上的数据
OrchardSprays #使用拉丁方设计研究不同喷雾剂对蜜蜂的影响
PlantGrowth #三种处理方式对植物产量的影响
pressure #温度和气压
Puromycin #两种细胞中辅因子浓度对酶促反应的影响
quakes #1000次地震观测数据(震级>4)
randu #在VMS1.5中使用FORTRAN中的RANDU三个一组生成随机数字,共400组。
#该随机数字有问题。在VMS2.0以上版本已修复。
rock #48块石头的形态数据
sleep #两药物的催眠效果
stackloss #化工厂将氨转为硝酸的数据
swiss #瑞士生育率和社会经济指标
ToothGrowth #VC剂量和摄入方式对豚鼠牙齿的影响
trees #树木形态指标
USArrests #美国50个州的四个犯罪率指标
USJudgeRatings #43名律师的12个评价指标
warpbreaks #织布机异常数据
women #15名女性的身高和体重
列表
state.center #美国50个州中心的经度和纬度
类数据框
ChickWeight #饮食对鸡生长的影响
CO2 #耐寒植物CO2摄取的差异
DNase #若干次试验中,DNase浓度和光密度的关系
Indometh #某药物的药物动力学数据
Loblolly #火炬松的高度、年龄和种源
Orange #桔子树生长数据
Theoph #茶碱药动学数据
时间序列数据
airmiles #美国1937-1960年客运里程营收(实际售出机位乘以飞行哩数)
AirPassengers #Box & Jenkins航空公司1949-1960年每月国际航线乘客数
austres #澳大利亚1971-1994每季度人口数(以千为单位)
BJsales #有关销售的一个时间序列
BJsales.lead #前一指标的先行指标(leading indicator)
co2 #1959-1997年每月大气co2浓度(ppm)
discoveries #1860-1959年每年巨大发现或发明的个数
ldeaths #1974-1979年英国每月支气管炎、肺气肿和哮喘的死亡率
fdeaths #前述死亡率的女性部分
mdeaths #前述死亡率的男性部分
freeny.y #每季度收入
JohnsonJohnson #1960-1980年每季度Johnson & Johnson股票的红利
LakeHuron #1875-1972年某一湖泊水位的记录
lh #黄体生成素水平,10分钟测量一次
lynx #1821-1934年加拿大猞猁数据
nhtemp #1912-1971年每年平均温度
Nile #1871-1970尼罗河流量
nottem #1920-1939每月大气温度
presidents #1945-1974年每季度美国总统支持率
UKDriverDeaths #1969-1984年每月英国司机死亡或严重伤害的数目
sunspot.month #1749-1997每月太阳黑子数
sunspot.year #1700-1988每年太阳黑子数
sunspots #1749-1983每月太阳黑子数
treering #归一化的树木年轮数据
UKgas #1960-1986每月英国天然气消耗
USAccDeaths #1973-1978美国每月意外死亡人数
uspop #1790–1970美国每十年一次的人口总数(百万为单位)
WWWusage #每分钟网络连接数
Seatbelts #多变量时间序列。和UKDriverDeaths时间段相同,反映更多因素。
EuStockMarkets #多变量时间序列。欧洲股市四个主要指标的每个工作日记录,共1860条记录。
Warpbreaks这个数据集有3列变量,我们根据wool和tension这两个因子变量来分类对breaks这个数据变量求均值
Airquality这个数据集有6个列变量,大气层,阳光,风,温度,月份,天数,虽然它们都是数据变量,但是我们可以把其中几个因子化来进行分类汇总计算,比如我们以month来作为因子,这样把数据分成了各个月份的,再对ozone和Temp进行分别求均值
Chickwts这个数据有两列,不同的喂养环境下统计小鸡的重量,可以根据6中喂养环境来对各自的小鸡统计平均重量
Esoph这个数据集有5个列变量,其中3个是因子,两个是数据,,同理做数据汇总
这是一个时间序列数据,可以进行画图
还可以查看很多自己安装的包里面内置的数据
比如我安装一个ggplot2,它会自动下载几个相关的包一起安装
data(package="ggplot2")可以查看这个包自带的数据集
本地图片,请重新上传
R还可以进行脚本运算,实习批量化处理数据
本地图片,请重新上传